/**
 * 支付相关API接口
 */

import request from '../utils/request.js'

export const paymentApi = {
  /**
   * 获取支付方式列表
   */
  getPaymentMethods() {
    return request.get('/payment/methods')
  },

  /**
   * 创建支付订单
   * @param {Object} data - 支付数据
   * @param {string} data.orderId - 订单ID
   * @param {string} data.paymentMethod - 支付方式
   * @param {number} data.amount - 支付金额
   * @param {string} data.currency - 货币类型
   * @param {string} data.returnUrl - 支付成功回调地址
   * @param {string} data.notifyUrl - 支付结果通知地址
   */
  createPayment(data) {
    return request.post('/payment/create', data)
  },

  /**
   * 查询支付状态
   * @param {string} paymentId - 支付订单ID
   */
  getPaymentStatus(paymentId) {
    return request.get(`/payment/${paymentId}/status`)
  },

  /**
   * 获取支付结果
   * @param {string} paymentId - 支付订单ID
   */
  getPaymentResult(paymentId) {
    return request.get(`/payment/${paymentId}/result`)
  },

  /**
   * 取消支付
   * @param {string} paymentId - 支付订单ID
   * @param {string} reason - 取消原因
   */
  cancelPayment(paymentId, reason) {
    return request.put(`/payment/${paymentId}/cancel`, { reason })
  },

  /**
   * 申请退款
   * @param {Object} data - 退款数据
   * @param {string} data.paymentId - 支付订单ID
   * @param {number} data.refundAmount - 退款金额
   * @param {string} data.reason - 退款原因
   */
  applyRefund(data) {
    return request.post('/payment/refund', data)
  },

  /**
   * 查询退款状态
   * @param {string} refundId - 退款ID
   */
  getRefundStatus(refundId) {
    return request.get(`/payment/refund/${refundId}/status`)
  },

  /**
   * 获取支付历史
   * @param {Object} params - 查询参数
   * @param {number} params.page - 页码
   * @param {number} params.limit - 每页数量
   * @param {string} params.status - 支付状态
   * @param {string} params.startDate - 开始日期
   * @param {string} params.endDate - 结束日期
   */
  getPaymentHistory(params = {}) {
    return request.get('/payment/history', params)
  },

  /**
   * 获取退款历史
   * @param {Object} params - 查询参数
   */
  getRefundHistory(params = {}) {
    return request.get('/payment/refund-history', params)
  },

  /**
   * 微信支付统一下单
   * @param {Object} data - 微信支付数据
   */
  wechatPay(data) {
    return request.post('/payment/wechat/unified-order', data)
  },

  /**
   * 支付宝支付
   * @param {Object} data - 支付宝支付数据
   */
  alipay(data) {
    return request.post('/payment/alipay/trade-create', data)
  },

  /**
   * 银联支付
   * @param {Object} data - 银联支付数据
   */
  unionPay(data) {
    return request.post('/payment/unionpay/order', data)
  },

  /**
   * 余额支付
   * @param {Object} data - 余额支付数据
   * @param {string} data.orderId - 订单ID
   * @param {number} data.amount - 支付金额
   * @param {string} data.paymentPassword - 支付密码
   */
  balancePay(data) {
    return request.post('/payment/balance/pay', data)
  },

  /**
   * 获取账户余额
   */
  getAccountBalance() {
    return request.get('/payment/balance')
  },

  /**
   * 充值余额
   * @param {Object} data - 充值数据
   * @param {number} data.amount - 充值金额
   * @param {string} data.paymentMethod - 支付方式
   */
  rechargeBalance(data) {
    return request.post('/payment/balance/recharge', data)
  },

  /**
   * 提现申请
   * @param {Object} data - 提现数据
   * @param {number} data.amount - 提现金额
   * @param {string} data.bankCard - 银行卡号
   * @param {string} data.bankName - 银行名称
   */
  withdrawBalance(data) {
    return request.post('/payment/balance/withdraw', data)
  },

  /**
   * 设置支付密码
   * @param {Object} data - 密码数据
   * @param {string} data.password - 支付密码
   * @param {string} data.confirmPassword - 确认密码
   * @param {string} data.smsCode - 短信验证码
   */
  setPaymentPassword(data) {
    return request.post('/payment/set-password', data)
  },

  /**
   * 修改支付密码
   * @param {Object} data - 密码数据
   * @param {string} data.oldPassword - 旧密码
   * @param {string} data.newPassword - 新密码
   * @param {string} data.smsCode - 短信验证码
   */
  changePaymentPassword(data) {
    return request.put('/payment/change-password', data)
  },

  /**
   * 忘记支付密码
   * @param {Object} data - 重置数据
   * @param {string} data.newPassword - 新密码
   * @param {string} data.smsCode - 短信验证码
   */
  resetPaymentPassword(data) {
    return request.put('/payment/reset-password', data)
  }
}

export default paymentApi